interface CameraOptions {
  center?: [number, number]; // 经度、纬度
  zoom?: number; // 缩放级别
  bearing?: number; // 旋转角度 (0 - 360)
  pitch?: number; // 倾斜角度 (0 - 60)
  bounds?: any; // 范围
}

/**
 * 设置相机的各种属性：中心、缩放、旋转、倾斜
 * @param options 相机设置选项
 */
export function setCamera(map: any, options: CameraOptions) {
  if (options.center) {
    map.setCenter(options.center);
  }
  if (options.zoom !== undefined) {
    map.setZoom(options.zoom);
  }
  if (options.bearing !== undefined) {
    map.setBearing(options.bearing);
  }
  if (options.pitch !== undefined) {
    map.setPitch(options.pitch);
  }
  if (options.bounds !== undefined) {
    map.fitBounds(options.bounds);
  }
}
/**
 * 获取当前相机的所有状态
 * @returns 返回相机当前的中心点、缩放、旋转、倾斜
 */
export function getCamera(map: any) {
  return {
    center: map.getCenter().toArray() as [number, number],
    zoom: map.getZoom(),
    bearing: map.getBearing(),
    pitch: map.getPitch(),
    bounds: map.getBounds()
  };
}
/**
 * 平移地图（中心点变化）
 * @paramCenter 平移的经纬度偏移量
 */
export function panByCenter(map: any, offset: [number, number]) {
  map.panByCenter(offset);
}
/**
 * 缩放地图（增加或减少缩放级别）
 * @param zoomChange 缩放级别的偏移量
 */
export function zoomBy(map: any, zoomChange: number) {
  map.zoomBy(zoomChange);
}
/**
 * 设置地图的缩放级别
 * @param zoom 缩放级别
 */
export function setZoom(map: any, zoom: number) {
  map.setZoom(zoom);
}
/**
 * 设置地图的旋转角度
 * @param bearing 旋转角度
 */
export function setBearing(map: any, bearing: number) {
  map.setBearing(bearing);
}
/**
 * 设置地图的倾斜角度
 * @param pitch 倾斜角度
 */
export function setPitch(map: any, pitch: number) {
  map.setPitch(pitch);
}
/**
 * 跳转到指定的中心点
 * @param center 指定的经纬度位置
 */
export function flyToCenter(map: any, center: any, options?: mapboxgl.FlyToOptions) {
  map.flyTo({
    center,
    zoom: options?.zoom ?? map.getZoom(),
    bearing: options?.bearing ?? map.getBearing(),
    pitch: options?.pitch ?? map.getPitch(),
    essential: true,
    ...options
  });
}
/**
 * 跳转到指定的视角（包括中心点、缩放、旋转、倾斜）
 * @param options 指定的视角设置
 */
export function flyToView(map: any, options: CameraOptions & mapboxgl.FlyToOptions) {
  map.flyTo({
    center: options.center,
    zoom: options.zoom,
    bearing: options.bearing,
    pitch: options.pitch,
    ...options
  });
}

/**
 * 重置地图到默认视角
 */
export function resetCamera(map: any) {
  setCamera(map, {
    center: [0, 0], // 可以设置为默认值（例如 [0, 0]）
    zoom: 2, // 默认缩放级别
    bearing: 0, // 默认旋转角度
    pitch: 0 // 默认倾斜角度
  });
}
